//public class Main {
//    public static void main(String[] args) {
//        System.out.println("To iterate is human, to recurse divine.");
//    }
//}

//
//import java.util.Scanner;
//
//public class Main {
//    public static void main(String[] args) {
//        Scanner scanner = new Scanner(System.in);
//        int n = scanner.nextInt();
//        int k = scanner.nextInt();
//        int m = scanner.nextInt();
//        System.out.println(n-k*m);
//    }
//}
//
//import java.util.Scanner;
//
//public class Main {
//    public static void main(String[] args) {
//        Scanner scanner = new Scanner(System.in);
//        int n = scanner.nextInt();
//        int m = scanner.nextInt();
//        for(int i = 0; i<n; i++) {
//            float p = scanner.nextFloat();
//            if(p < m) {
//                System.out.printf("On Sale! %.1f\n",p);
//            }
//        }
//    }
//}
//
//import java.util.Scanner;
//
//public class Main {
//    public static void main(String[] args) {
//        Scanner scanner = new Scanner(System.in);
//        String str = scanner.nextLine();
//        if(str.length() == 4)  {
//            String s1 = "";
//            String s2 = str.substring(2);
//            Integer y = Integer.parseInt(str.substring(0,2));
//            if(y < 22) {
//                s1 = "20" + str.substring(0,2);
//            }else {
//                s1 = "19" + str.substring(0,2);
//            }
//            System.out.println(s1 + "-" + s2);
//        }else {
//            String s1 = str.substring(0,4);
//            String s2 = str.substring(4);
//            System.out.println(s1 + "-" + s2);
//        }
//    }
//}

//
//import java.util.Scanner;
//
//public class Main {
//    public static void main(String[] args) {
//        Scanner scanner = new Scanner(System.in);
//        int[] nums = new int[24];
//        for(int i = 0; i<24; i++) {
//            nums[i] = scanner.nextInt();
//        }
//        while (true) {
//            int k = scanner.nextInt();
//            if(k<0 || k > 23) break;
//            if(nums[k] > 50) {
//                System.out.println(nums[k] + " Yes");
//            }else {
//                System.out.println(nums[k] + " No");
//            }
//        }
//    }
//}
//
//import java.util.Scanner;
//
//public class Main {
//    public static void main(String[] args) {
//        Scanner scanner = new Scanner(System.in);
//        int n = scanner.nextInt();
//        int m = scanner.nextInt();
//        int i;
//        scanner.nextLine();
//        for(i = 0; i<n; i++) {
//            String str = scanner.nextLine();
//            if(str.indexOf("qiandao") == -1 && str.indexOf("easy")==-1) {
//                m--;
//
//                if(m == -1) {
//                    System.out.println(str);
//                    break;
//                }
//            }
//        }
//        if(i == n) {
//            System.out.println("Wo AK le");
//        }
//    }
//}

//
//import java.io.BufferedReader;
//import java.io.IOException;
//import java.io.InputStreamReader;
//
//public class Main {
//    public static void main(String[] args) throws IOException {
//        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
//        int n = Integer.parseInt(br.readLine());
//        int maxValue = Integer.MIN_VALUE;
//        int minValue = Integer.MAX_VALUE;
//        int maxValueCount = 0;
//        int minValueCount = 0;
//        String[] value = br.readLine().split(" ");
//        for(int i = 0; i<n; i++) {
//            int k = Integer.parseInt(value[i]);
//            if(maxValue == k) maxValueCount++;
//            if(minValue == k) minValueCount++;
//
//            if(maxValue < k) {
//                maxValue = k;
//                maxValueCount = 1;
//            }
//            if(minValue > k) {
//                minValue = k;
//                minValueCount = 1;
//            }
//        }
//        System.out.println(minValue + " " + minValueCount);
//        System.out.println(maxValue + " " + maxValueCount);
//    }
//}

//
//import java.util.Scanner;
//
//public class Main {
//    public static void main(String[] args) {
//        Scanner scanner = new Scanner(System.in);
//        int a1 = scanner.nextInt();
//        int a2 = scanner.nextInt();
//        int n = scanner.nextInt();
//        int[] arr = new int[1002];
//        arr[0] = a1;
//        arr[1] = a2;
//        int index = 2;
//        int l = 0, r = 1;
//        while(index < n) {
//            int k = arr[l++] * arr[r++];
//            String s = String.valueOf(k);
//            for(int i = 0; i<s.length(); i++) {
//                arr[index++] = s.charAt(i)-'0';
//                if(index >= n) break;
//            }
//        }
//
//        for(int i = 0; i<n; i++) {
//            System.out.print(arr[i]);
//            if(i<n-1) System.out.print(" ");
//        }
//    }
//}
//
//import java.io.BufferedReader;
//import java.io.IOException;
//import java.io.InputStreamReader;
//import java.util.ArrayList;
//import java.util.List;
//
//public class Main {
//    public static void main(String[] args) throws IOException {
//        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
//        String[] value = br.readLine().split(" ");
//        int n = Integer.parseInt(value[0]);
//        int m = Integer.parseInt(value[1]);
//        List<List<Integer>> lists = new ArrayList<>();
//        lists.add(new ArrayList<>());
//        for(int i = 1; i<=n; i++) {
//            lists.add(new ArrayList<>());
//            lists.get(i).add(-1);
//            value = br.readLine().split(" ");
//            int k = Integer.parseInt(value[0]);
//            for(int j = 1; j<=k; j++) {
//                int x = Integer.parseInt(value[j]);
//                lists.get(i).add(x);
//            }
//        }
//
//        List<Integer> cnt = new ArrayList<>(0);
//        cnt.add(-1);
//        int cur = 1; //当前所在档
//        for(int i = 1; i<=m; i++) {
//            value = br.readLine().split(" ");
//            int k = Integer.parseInt(value[0]);
//            int x = Integer.parseInt(value[1]);
//            if(k == 0) {
//                cur = lists.get(cur).get(x);
//            }else if(k == 1) {
//                cnt.add(x,cur);
//                System.out.println(cur);
//            }else if(k == 2) {
//                cur = cnt.get(x);
//            }
//        }
//        System.out.println(cur);
//    }
//}

//
//import java.io.*;
//import java.util.*;
//
//public class Main {
//    public static void main(String[] args) throws IOException {
//        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
//        PrintWriter pw = new PrintWriter(new OutputStreamWriter(System.out));
//        String[] value = br.readLine().split(" ");
//        int n = Integer.parseInt(value[0]);
//        int m = Integer.parseInt(value[1]);
//        int s = Integer.parseInt(value[2]);
//
//        Stack<Character> stack = new Stack<>();//框
//        List<List<Character>> lists = new LinkedList<>();
//        lists.add(new LinkedList<>());
//
//        for(int i = 1; i<=n; i++) {
//            lists.add(new LinkedList<>());
//            String str = br.readLine();
//            for(int j = 0; j<str.length(); j++) {
//                lists.get(i).add(str.charAt(j));
//            }
//        }
//
//        List<Character> ret = new ArrayList<>();
//
//        value = br.readLine().split(" ");
//        int index = 0;
//
//        while (true) {
//            int k = Integer.parseInt(value[index++]);
//            if(k == -1) {
//                break;
//            }
//
//            //框满
//            if(k == 0) {
//                if(!stack.isEmpty()) {
//                    ret.add(stack.pop());
//                }
//            }else {
//                if(stack.size() >= s) {
//                    ret.add(stack.pop());
//                }
//                if(!lists.get(k).isEmpty()) {
//                    stack.push(lists.get(k).get(0));
//                    lists.get(k).remove(0);
//                }
//            }
//        }
//
//        for(int i = 0; i<ret.size(); i++) {
//            pw.print(ret.get(i));
//        }
//        pw.flush();
//    }
//}



import java.io.*;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        PrintWriter pw = new PrintWriter(new OutputStreamWriter(System.out));
        String[] value = br.readLine().split(" ");
        int n = Integer.parseInt(value[0]);
        int m = Integer.parseInt(value[1]);
        int s = Integer.parseInt(value[2]);
        Stack<Character> stack = new Stack<>();//框
        Queue<Character>[] queues = new Queue[n+1];
        for(int i = 1; i<=n; i++) {
            queues[i] = new LinkedList<>();
            String str = br.readLine();
            for(int j = 0; j<str.length(); j++) {
                queues[i].add(str.charAt(j));
            }
        }
        List<Character> ret = new ArrayList<>();
        value = br.readLine().split(" ");
        int index = 0;

        while (true) {
            int k = Integer.parseInt(value[index++]);
            if(k == -1) {
                break;
            }
            //框满
            if(k == 0) {
                if(!stack.isEmpty()) {
                    ret.add(stack.pop());
                }
            }else {
                if(stack.size() >= s) {
                    ret.add(stack.pop());
                }
                if(!queues[k].isEmpty()) {
                    stack.push(queues[k].poll());
                }
            }
        }

        for(int i = 0; i<ret.size(); i++) {
            pw.print(ret.get(i));
        }
        pw.flush();
    }
}





class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定，请勿修改，直接返回方法规定的值即可
     *
     *
     * @param grid int整型ArrayList<ArrayList<>>
     * @return int整型
     */
    public int rotApple (ArrayList<ArrayList<Integer>> grid) {
        // write code here
        List<int[]> list = new ArrayList<>();
        int n = grid.size(), m = grid.get(0).size();
        boolean[][] st = new boolean[n][m];
        int count = 0;
        for(int i = 0; i<n; i++) {
            for(int j = 0; j<m; j++) {
                if(grid.get(i).get(j) == 2) {
                    list.add(new int[]{i,j});
                    st[i][j] = true;
                }
                if(grid.get(i).get(j) == 1) {
                    count ++;
                }
            }
        }

        int k = list.size();
        Queue<int[]> []queues = new LinkedList[list.size()];
        for(int i = 0; i<k; i++) {
            queues[i] = new LinkedList<>();
            queues[i].add(list.get(i));
        }

        int[] xx = {1,-1,0,0};
        int[] yy = {0,0,-1,1};

        int step = 0;

        while(true) {
            int flag1 = 0;

            //每个源点同时向外扩展一周
            for(int i =0 ; i<k; i++) {
                //每次向外走一步
                int flag2 = 0;
                if(!queues[i].isEmpty()) {
                    int size = queues[i].size();
                    for(int r = 0; r<size; r++) {
                        int[] a = queues[i].poll();
                        count--;
                        int x = a[0], y = a[1];
                        for(int j = 0; j<4; j++) {
                            int dx = x + xx[j];
                            int dy = y + yy[j];
                            if(dx >= 0 && dx < n && dy >= 0 && dy < m && grid.get(dx).get(dy) == 1 && !st[dx][dy]) {
                                queues[i].add(new int[]{dx, dy});
                                flag2 = 1;
                                st[dx][dy] = true;
                            }
                        }
                    }
                }

                if(flag2 == 0) {
                    flag1 = 1;
                    break;
                }
                step++;
            }

            if(flag1 == 1) {
                break;
            }
        }

        if(count!=0) {
            return -1;
        }else {
            return step;
        }
    }
}














